kill関数は、プロセスにシグナルを送ります。
この関数は、C言語のライブラリ関数(標準関数)ではありませんので、コンパイラにより、使えない場合があります。
#include <signal.h>
int kill(pid_t pid, int sig);
pidはシグナルの送信先を指定します。
sigは送信するシグナルの種類を指定します。シグナルの種類についてはsignal関数をご覧ください。
戻り値として、処理が成功した場合は0が、エラーの場合は-1を返します。
第1引数のpidは指定する値により、意味が異なります。
- 正の値を指定した場合は、pidをプロセスIDとみなして、そのプロセスにシグナルを送ります。
- 0を指定した場合は、呼び出し元プロセスのプロセス・グループに属する全てのプロセスにシグナルを送ります。
- -1を指定した場合は、呼び出し元プロセスがシグナルを送る許可を持つ全てのプロセスにシグナルを送ります。但し、プロセス番号1(initプロセス)には送りません。
- -1より小さな値を指定した場合は、pidの絶対値のプロセス・グループに属する全てのプロセスにシグナルを送ります。
次の例題プログラムは、子プロセスにSIGINTシグナルを送って、子プロセスを終了しています。
プログラム 例
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <signal.h>
int main()
{
int p_id;
if ((p_id = fork()) == 0) {
/* 子プロセス */
while (1) {
printf('子プロセス実行中\n');
sleep(1);
}
}
else {
/* 親プロセス */
sleep(3);
/* 子プロセスに終了シグナルを送信 */
kill(p_id, SIGINT);
wait(NULL);
printf('親プロセス終了\n');
}
return 0;
}
例の実行結果
$ ./kill.exe 子プロセス実行中 子プロセス実行中 子プロセス実行中 子プロセス実行中 親プロセス終了 $